<!DOCTYPE html>
<html>

<head lang="en">
  <meta charset="UTF-8">
  <title>04-全选反选</title>
  <style>
    * {
      padding: 0;
      margin: 0;
    }

    .wrap {
      width: 300px;
      margin: 100px auto 0;
    }

    table {
      border-collapse: collapse;
      border-spacing: 0;
      border: 1px solid #c0c0c0;
      width: 300px;
    }

    th,
    td {
      border: 1px solid #d0d0d0;
      color: #404060;
      padding: 10px;
    }

    th {
      background-color: #09c;
      font: bold 16px "微软雅黑";
      color: #fff;
    }

    td {
      font: 14px "微软雅黑";
    }

    tbody tr {
      background-color: #f0f0f0;
    }

    tbody tr:hover {
      cursor: pointer;
      background-color: #fafafa;
    }
  </style>

</head>

<body>
  <div class="wrap">
    <table>
      <thead>
        <tr>
          <th>
            <input type="checkbox" id="j_cbAll" />
          </th>
          <th>商品</th>
          <th>价钱</th>
        </tr>
      </thead>
      <tbody id="j_tb">
        <tr>
          <td>
            <input type="checkbox" />
          </td>
          <td>iPhone8</td>
          <td>8000</td>
        </tr>
        <tr>
          <td>
            <input type="checkbox" />
          </td>
          <td>iPad Pro</td>
          <td>5000</td>
        </tr>
        <tr>
          <td>
            <input type="checkbox" />
          </td>
          <td>iPad Air</td>
          <td>2000</td>
        </tr>
        <tr>
          <td>
            <input type="checkbox" />
          </td>
          <td>Apple Watch</td>
          <td>2000</td>
        </tr>

      </tbody>
    </table>
  </div>
  <script>
    // 1. 全选 与 全不选：让下面所有的复选框的checked属性（选中状态）跟随全选按钮即可
    // a. 获取元素
    var j_cbAll = document.getElementById('j_cbAll');
    var j_tbs = document.getElementById('j_tb').getElementsByTagName('input');

    // b. 注册事件
    j_cbAll.onclick = function () {
      console.log(this.checked);
      for (var i = 0; i < j_tbs.length; i++) {
        // j_tbs[i].checked = !j_tbs[i].checked;
        j_tbs[i].checked = this.checked;
      }
    }

    // 2. 小按钮绑定事件：如果小按钮全部选中 全选按钮选中 否则不选中
    for (var i = 0; i < j_tbs.length; i++) {

      j_tbs[i].onclick = function () {
        // flag主要是控制全选按钮是否被选中
        var flag = true;
        for (var i = 0; i < j_tbs.length; i++) {
          if (!j_tbs[i].checked) {
            flag = false;
            // 退出for循环 这样可以提高效率 因为只要有一个没有被选中，剩下的就无需判断了
            break;
          }
        }
        j_cbAll.checked = flag;
      }
    }
  </script>
</body>

</html>